package com.benben.springSecurity.weiwei;

public class LianxuZuichang1 {
    public int longestLine(int[][] M) {
        if (M.length == 0){
            return 0;
        }
        int ones = 0;
        //横着每一行一行画
        for(int i=0;i<M.length;i++){
            int count = 0;
            for(int j=0;j<M[0].length;j++){
                if(M[i][j] == 1){
                    count++;
                    ones = Math.max(ones,count);
                } else {
                    count = 0;
                }
            }
        }
        //竖着每一列一列画
        for(int i=0;i<M[0].length;i++){
            int count = 0;
            for(int j=0;j<M.length;j++){
                if(M[i][j] == 1){
                    count++;
                    ones = Math.max(ones,count);
                }else {
                    count = 0;
                }
            }
        }
        //左上角往正对角线上画
        for(int i=0;i<M[0].length || i < M.length;i++){
            int count = 0;
            for(int x = 0,y=i;x<M.length&&y<M[0].length;x++,y++){
                if(M[x][y] == 1){
                    count++;
                    ones = Math.max(ones,count);
                }else{
                    count = 0;
                }
            }
        }
        //正对角线往下画
        for(int i=0;i<M.length || i<M[0].length;i++){
            int count = 0;
            for(int x=i,y=M[0].length-1;x<M.length&&y>=0;x++,y--){
                if(M[x][y] == 1){
                    count++;
                    ones = Math.max(ones,count);
                }else {
                    count = 0;
                }
            }
        }
        //右上角往反对角线上画
        for(int i=0;i<M.length || i<M[0].length;i++){
            int count = 0;
            for(int x=0,y=M[0].length-1-i;x<M.length&&y>=0;x++,y--){
                if(M[x][y] == 1){
                    count++;
                    ones = Math.max(ones,count);
                }else{
                    count = 0;
                }
            }
        }
        //反对角线往下画
        for(int i=0;i<M[0].length||i<M.length;i++){
            int count = 0;
            for(int x=i,y=0;x<M.length&&y<M[0].length;x++,y++){
                if(M[x][y] == 1){
                    count++;
                    ones = Math.max(ones,count);
                }else{
                    count = 0;
                }
            }
        }
        return ones;
    }
}
